/**
 * 增强版API错误处理模块
 * 用于处理API返回的500错误和HTML响应
 */

class EnhancedApiHandler {
    /**
     * 处理排行榜API响应
     * @param {string} apiUrl - API地址
     * @param {Function} onSuccess - 成功回调函数
     * @param {Function} onError - 错误回调函数
     * @param {Array} fallbackData - 后备数据
     */
    static handleLeaderboardApi(apiUrl, onSuccess, onError, fallbackData) {
        fetch(apiUrl, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/json'
            },
            cache: 'no-cache'
        })
        .then(response => {
            // 记录响应状态和头部信息
            console.log('API response status:', response.status);
            console.log('API response headers:', [...response.headers.entries()]);
            
            // 检查Content-Type
            const contentType = response.headers.get('content-type');
            console.log('API Content-Type:', contentType);
            
            // 如果响应不是2xx状态码，抛出错误
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            
            // 返回文本内容以便进一步处理
            return response.text();
        })
        .then(text => {
            console.log('API raw response length:', text.length);
            console.log('API raw response (first 500 chars):', text.substring(0, 500));
            
            // 检查是否为空响应
            if (!text || text.trim() === '') {
                throw new Error('Empty response from server');
            }
            
            // 检查响应是否包含HTML（服务器错误页面）
            if (text.trim().startsWith('<') || text.includes('<html') || text.includes('<!DOCTYPE')) {
                console.warn('Server returned HTML instead of JSON');
                throw new Error('Server Error: ' + text.substring(0, 100) + '...');
            }
            
            // 尝试解析为JSON
            try {
                const data = JSON.parse(text);
                console.log('API parsed JSON:', data);
                
                // 检查API返回码
                if (data.code === 1) {
                    onSuccess(data);
                } else {
                    console.warn('API returned error code:', data.code);
                    // 增加对message字段的容错处理
                    const errorMessage = data.message || data.msg || 'API returned error';
                    onError(errorMessage, fallbackData);
                }
            } catch (e) {
                console.error('Failed to parse JSON:', e);
                console.error('Response text that failed to parse:', text);
                onError('Failed to parse server response', fallbackData);
            }
        })
        .catch(error => {
            console.error('Network error:', error);
            onError(error.message, fallbackData);
        });
    }
    
    /**
     * 处理进度API响应
     * @param {string} apiUrl - API地址
     * @param {Function} onSuccess - 成功回调函数
     * @param {Function} onError - 错误回调函数
     * @param {Object} demoData - 演示数据
     */
    static handleProgressApi(apiUrl, onSuccess, onError, demoData) {
        fetch(apiUrl, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json'
            }
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                onSuccess(data);
            } else {
                // 增加对message字段的容错处理
                const errorMessage = data.message || data.msg || 'Unknown error';
                console.warn('API returned error:', errorMessage);
                onError(errorMessage, demoData);
            }
        })
        .catch(error => {
            console.error('Network error:', error);
            onError(error.message, demoData);
        });
    }
}

// 导出模块（如果在模块环境中使用）
if (typeof module !== 'undefined' && module.exports) {
    module.exports = EnhancedApiHandler;
}